<?php
//declare(ticks=1);

use \GatewayWorker\Lib\Gateway;
use Workerman\Lib\Timer;
use Workerman\Protocols\Websocket;

require_once  GKROOT . '/core/loader.php'; //加载全局的loader
require_once  WORKER_ROOT . '/lib/loader.php';  // 加载 项目的loader

/**
 * 主逻辑
 * 主要是处理 onConnect onMessage onClose 三个方法
 * onConnect 和 onClose 如果不需要可以不用实现并删除
 */
class Events
{
    //GlobalData 对象
  	public static $globaldata;
  	
  	 //log 日志对象
  	public static $log;
  	
	 // 进程启动时操作
    public static function onWorkerStart()
    {
        //示例globaldata Client
     	self::$globaldata = new \core\Client('127.0.0.1:2301');
     	
     	//日志对象
     	$config = self::getConfig(true);//获取最新的配置文件
        self::$log = new \core\Log($config['log']);
        
        // $tools = new \lib\Tools();
        // var_dump($tools->debug('测试'));
        // $tools->http('https://mp.weixin.qq.com/');
        
        // $Parse = new \lib\Parse();
        // $Parse->db();
        
    }
    /**
     * 当客户端连接时触发
     * 如果业务不需此回调可以删除onConnect
     * 
     * @param int $client_id 连接id
     */
    public static function onConnect($client_id)
    {
		
    }
    
   /**
    * 当客户端发来消息时触发
    * @param int $client_id 连接id
    * @param mixed $buffer 具体消息
    */
    public static function onMessage($client_id, $buffer)
    {
        echo "client:{$_SERVER['REMOTE_ADDR']}:{$_SERVER['REMOTE_PORT']} gateway:{$_SERVER['GATEWAY_ADDR']}:{$_SERVER['GATEWAY_PORT']}  client_id:$client_id session:".json_encode($_SESSION)." onMessage:".$buffer."\n";
        $new_message = ['test'=>1];
        Gateway::sendToClient($client_id, json_encode($new_message));
        
        
        self::workeReload();
    }
   
    /**
    * 当用户断开连接时触发
    * @param int $client_id 连接id
    */
    public static function onClose($client_id)
    {
       
    }
    
    /**
    * 当收到的信息达到了指定数量，worker进程自动重启
    */
    public static function workeReload()
    {
        static $request_count;
        if(++$request_count > 1000000) {
            // 请求数达到1000000后退出当前进程，主进程会自动重启一个新的进程
            Worker::stopAll();
        }
    }
   
    /**
    * 获取config
    */
    public static function getConfig($p=false)
    {
       global $config;
       if($p){
           $config = require __DIR__ . '/config.php';
       }
       if($config){
           return $config;
       }else{
           $config = require_once __DIR__ . '/config.php';
           return $config;
       }
    }
}


